﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using DataLayer.dbml;
using DataLayer.Controller;
using DataLayer;
using System.Configuration;
using System.Text;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class home_Detalle : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //this.hdnNit.Value = "899999115-00";
            this.hdnNit.Value = Request.QueryString["NIT"].ToString();
            this.hdnValor.Value = Request.QueryString["valor"].ToString();
            this.hdnBusq.Value = Request.QueryString["busq"].ToString();

            this.loadGrid(this.hdnValor.Value);
        }
        else
        { 
            
        }
    }

    private void loadGrid(string valor)
    {
        Enumeraciones.TipoReporte busqueda = (Enumeraciones.TipoReporte)Enum.Parse(typeof(Enumeraciones.TipoReporte), this.hdnBusq.Value);

        switch (busqueda)
        {
            case Enumeraciones.TipoReporte.ESTADO_SERVICIOS:
                this.GetEstadoServicios(valor);
                break;
            case Enumeraciones.TipoReporte.SERVICIOS_ACTIVOS_PLATAFORMA:
                this.GetServiciosActivosPlataforma(valor);
                break;
            case Enumeraciones.TipoReporte.SOLICITUDES_EN_CURSO:
                this.GetSolicitudesEnCurso(valor);
                break;
            case Enumeraciones.TipoReporte.ESTADO_DEMOS:
                this.GetEstadoDemos(valor);
                break;
            case Enumeraciones.TipoReporte.CASOS_POR_TIPO:
                this.GetCasosPorTipo(valor);
                break;
            case Enumeraciones.TipoReporte.ESTADO_DE_CASOS:
                this.GetEstadoCasos(valor);
                break;
            case Enumeraciones.TipoReporte.REPORTES:
                this.GetReporte(valor, Request.QueryString["fecha1"].ToString(), Request.QueryString["fecha2"].ToString());
                break;
            case Enumeraciones.TipoReporte.FACTURACION:
                this.GetReporteFacturacion(valor, Request.QueryString["fecha1"].ToString(), Request.QueryString["fecha2"].ToString());
                break;
        }    
    }

    private void GetEstadoServicios(string valor)
    {
        this.lblTitulo.Text = "Estado de los servicios: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";

        //Se obtienen desde el web.config los estados a filtrar
        string estados = "";
        if (valor.Equals("Activos"))
        {
            estados = ConfigurationManager.AppSettings["EstadoServicioActivo"].ToString();
            this.hdnAncho.Value = "0,230,50,70,80,90,90,90,75,80";
        }        
        else if (valor.Equals("Suspendidos"))
        {
            estados = ConfigurationManager.AppSettings["EstadoServicioSuspendido"].ToString();
            this.hdnAncho.Value = "0,140,50,65,65,80,70,70,70,70,65,60";
        }        
        else if (valor.Equals("Cancelados"))
        {
            estados = ConfigurationManager.AppSettings["EstadoServicioCancelado"].ToString();
            this.hdnAncho.Value = "0,170,60,80,80,100,100,100,90,80";
        }
            

        //Construye arreglo con los estados
        string[] arrEstados = this.ConstruirArreglo(estados);

        //Trae los servicios según su estado (se traen diferentes columna dependiendo del estado que se muestra)
        DataTable dt = new DataTable();
        if (valor.Equals("Activos"))        
            dt = ServicesController.GetDetalleServiciosActivos(this.hdnNit.Value, arrEstados);
        else if (valor.Equals("Suspendidos"))        
            dt = ServicesController.GetDetalleServiciosSuspendidos(this.hdnNit.Value, arrEstados);                    
        else if (valor.Equals("Cancelados"))        
            dt = ServicesController.GetDetalleServiciosCancelaciones(this.hdnNit.Value, arrEstados);                    
        

        //Da formato a algunas columnas
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Columns.Contains("Fecha Activación"))            
                dt.Rows[i]["Fecha activación"] = this.FormatearFecha(dt.Rows[i]["fechaActivacion"].ToString());
            if (dt.Columns.Contains("Fecha Contrato"))
                dt.Rows[i]["Fecha Contrato"] = this.FormatearFecha(dt.Rows[i]["fechaContrato"].ToString());
            if (dt.Columns.Contains("Fecha Cancelación"))
                dt.Rows[i]["Fecha Cancelación"] = this.FormatearFecha(dt.Rows[i]["fechaCancelacion"].ToString());
            if (dt.Columns.Contains("Fecha Suspensión"))
                dt.Rows[i]["Fecha Suspensión"] = this.FormatearFecha(dt.Rows[i]["fechaSuspension"].ToString());
            if (dt.Columns.Contains("Fecha Reactivación"))
                dt.Rows[i]["Fecha Reactivación"] = this.FormatearFecha(dt.Rows[i]["fechaReactivacion"].ToString());

        }

        //Elimina columnas de fechas sin formatear
        if (dt.Columns.Contains("fechaActivacion"))
            dt.Columns.Remove("fechaActivacion");
        if (dt.Columns.Contains("fechaContrato"))
            dt.Columns.Remove("fechaContrato");
        if (dt.Columns.Contains("fechaCancelacion"))
            dt.Columns.Remove("fechaCancelacion");
        if (dt.Columns.Contains("fechaSuspension"))
            dt.Columns.Remove("fechaSuspension");
        if (dt.Columns.Contains("fechaReactivacion"))
            dt.Columns.Remove("fechaReactivacion");

        //Ancho de las columnas
        


        //Agrega columna para mostrar los detalles
        dt.Columns.Add("Detalle");        

        this.grd.DataSource = dt;
        this.grd.DataBind();        

        Session["VIEWDETALLE"] = dt;
    }

    private void GetServiciosActivosPlataforma(string valor)
    {
        this.lblTitulo.Text = "Servicios por plataforma: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";

        DataTable dt = ServicesController.GetDetalleServiciosByPlataforma(this.hdnNit.Value, valor);

        //Agrega columna para mostrar los detalles
        dt.Columns.Add("Detalle");

        this.hdnAncho.Value = "0,280,60,80,80,90,90,100,70";

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
    }

    private void GetSolicitudesEnCurso(string valor)
    {
        this.lblTitulo.Text = "Solicitudes en curso: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";
        bool traslado = false;
        string flujo = "";

        //Se obtienen desde el web.config los estados a filtrar
        string estados = "";
        if (valor.Equals("En proceso de activación"))
        {
            estados = ConfigurationManager.AppSettings["EstadoProcesoActivacion"].ToString();
            flujo = "FLUJO INSTALACION";
        }        
        else if (valor.Equals("Traslados"))
        {
            estados = ConfigurationManager.AppSettings["EstadoTraslados"].ToString();
            traslado = true;
            flujo = "FLUJO TRASLADO";
        }
        else if (valor.Equals("Cancelaciones"))
        {
            estados = ConfigurationManager.AppSettings["EstadoCancelaciones"].ToString();
            flujo = "FLUJO DE CANCELACION";
        }
        

        //Construye arreglo con los estados
        string[] arrEstados = this.ConstruirArreglo(estados);

        DataTable dt = ServicesController.GetDetalleServiciosSolicitudesEnCurso(this.hdnNit.Value, arrEstados, traslado, flujo);

        //Agrega columna para mostrar los detalles
        dt.Columns.Add("Detalle");

        this.hdnAncho.Value = "0,280,60,80,80,90,90,100,70";

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
    }

    private void GetEstadoDemos(string valor)
    {
        this.lblTitulo.Text = "Estado de los demos: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";

        //Se obtienen desde el web.config los estados a filtrar
        string estados = "";
        if (valor.Equals("Activos"))
            estados = ConfigurationManager.AppSettings["EstadoDemoActivo"].ToString();
        else if (valor.Equals("Finalizados"))
            estados = ConfigurationManager.AppSettings["EstadoDemoFinalizado"].ToString();

        //Construye arreglo con los estados
        string[] arrEstados = this.ConstruirArreglo(estados);

        DataTable dt = ServicesController.GetDetalleServiciosDemo(this.hdnNit.Value, arrEstados);

        //Agrega columna para mostrar los detalles
        dt.Columns.Add("Detalle");

        this.hdnAncho.Value = "0,280,60,80,80,90,90,100,70";

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
    }

    private void GetCasosPorTipo(string valor)
    {
        this.lblTitulo.Text = "Casos por tipo: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";

        //Se obtienen desde el web.config los estados a filtrar
        string estados = "";
        if (valor.Equals("Visita empresarial"))
            estados = ConfigurationManager.AppSettings["TipoCasoVisita"].ToString();
        else if (valor.Equals("Casos rápidos"))
        {
            estados = ConfigurationManager.AppSettings["TipoCasoRapido"].ToString();
            //Se agrega estado con tilde (en el web.config molesta la tilde)
            estados += ",Casos rápidos";
        }        
        else if (valor.Equals("Peticiones"))
        {
            estados = ConfigurationManager.AppSettings["TipoCasoPeticion"].ToString();        
                        //Se agrega estado con tilde (en el web.config molesta la tilde)
            estados += ",Petición";
        }
        else if (valor.Equals("Quejas"))
            estados = ConfigurationManager.AppSettings["TipoCasoQueja"].ToString();

        //Construye arreglo con los estados
        string[] arrEstados = this.ConstruirArreglo(estados);

        DataTable dt = CaseController.GetDetalleCasosByTipo(this.hdnNit.Value, arrEstados);

        //Da formato a algunas columnas
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Columns.Contains("Fecha apertura"))
                dt.Rows[i]["Fecha apertura"] = this.FormatearFecha(dt.Rows[i]["fechaApertura"].ToString());
            if (dt.Columns.Contains("Fecha cierre"))
                dt.Rows[i]["Fecha cierre"] = this.FormatearFecha(dt.Rows[i]["fechaCierre"].ToString());
        }

        //Elimina columnas de fechas sin formatear
        if (dt.Columns.Contains("fechaApertura"))
            dt.Columns.Remove("fechaApertura");
        if (dt.Columns.Contains("fechaCierre"))
            dt.Columns.Remove("fechaCierre");

        this.hdnAncho.Value = "0,100,240,130,100,90,90,110";

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
    }

    private void GetEstadoCasos(string valor)
    {
        this.lblTitulo.Text = "Estado de casos: " + valor.ToString();
        this.lblTexto.Text = "Breve explicación del reporte";

        //Se obtienen desde el web.config los estados a filtrar
        string estados = "";
        if (valor.Equals("Nuevos"))
            estados = ConfigurationManager.AppSettings["EstadoCasoNuevo"].ToString();
        else if (valor.Equals("Pendiente contacto aliado"))
            estados = ConfigurationManager.AppSettings["EstadoCasoPendienteContactoAliado"].ToString();
        else if (valor.Equals("Pendiente contacto cliente pruebas"))
            estados = ConfigurationManager.AppSettings["EstadoCasoPendienteContactoClientePruebas"].ToString();
        else if (valor.Equals("Pendiente visita aliado"))
            estados = ConfigurationManager.AppSettings["EstadoCasoPendienteVisitaAliado"].ToString();
        else if (valor.Equals("Pendiente visita axesat"))
            estados = ConfigurationManager.AppSettings["EstadoCasoPendienteVisitaAxesat"].ToString();
        else if (valor.Equals("Solucionado pendiente confirmación cliente"))
            estados = ConfigurationManager.AppSettings["EstadoCasoSolucionado"].ToString();

        //Construye arreglo con los estados
        string[] arrEstados = this.ConstruirArreglo(estados);

        DataTable dt = CaseController.GetDetalleEstadoByEstado(this.hdnNit.Value, arrEstados);

        //Da formato a algunas columnas
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Columns.Contains("Fecha apertura"))
                dt.Rows[i]["Fecha apertura"] = this.FormatearFecha(dt.Rows[i]["fechaApertura"].ToString());
            if (dt.Columns.Contains("Fecha cierre"))
                dt.Rows[i]["Fecha cierre"] = this.FormatearFecha(dt.Rows[i]["fechaCierre"].ToString());
        }

        //Elimina columnas de fechas sin formatear
        if (dt.Columns.Contains("fechaApertura"))
            dt.Columns.Remove("fechaApertura");
        if (dt.Columns.Contains("fechaCierre"))
            dt.Columns.Remove("fechaCierre");

        this.hdnAncho.Value = "0,100,240,130,100,90,90,110";

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
    }

    private void GetReporte(string valor, string fecha1, string fecha2)
    {
        this.lblPeriodo.Text = "Reporte del período: " + fecha1 + " - " + fecha2;
        this.lblTexto.Text = "Breve explicación del reporte";

        //Obtiene las fechas de los string
        DateTime dateFecha1 = this.GetFechaFromString(fecha1);
        DateTime dateFecha2 = this.GetFechaFromString(fecha2);
        dateFecha2 = dateFecha2.AddHours(23);
        dateFecha2 = dateFecha2.AddMinutes(59);

        DataTable dt = new DataTable();
        string estados = "";
        if (valor.Equals("ventas"))
        {
            this.lblTitulo.Text = "Reporte de ventas";
            estados = ConfigurationManager.AppSettings["ServiciosReporteVenta"].ToString();
            string[] arrEstados = this.ConstruirArreglo(estados);
            dt = ServicesController.GetReporteVentas(this.hdnNit.Value, dateFecha1, dateFecha2, arrEstados);

            //Agrega columna para mostrar los detalles
            dt.Columns.Add("Detalle");

            this.hdnAncho.Value = "0,150,80,90,80,90,80,85,85,100,80";
        }
        else if (valor.Equals("activaciones"))
        {
            this.lblTitulo.Text = "Reporte de activaciones";
            estados = ConfigurationManager.AppSettings["ServiciosReporteActivaciones"].ToString();
            string[] arrEstados = this.ConstruirArreglo(estados);
            dt = ServicesController.GetReporteActivaciones(this.hdnNit.Value, dateFecha1, dateFecha2, arrEstados);

            //Agrega columna para mostrar los detalles
            dt.Columns.Add("Detalle");

            this.hdnAncho.Value = "0,150,80,90,80,90,80,85,85,100,80";
        }
        else if (valor.Equals("cancelaciones"))
        {
            this.lblTitulo.Text = "Reporte de cancelaciones";
            estados = ConfigurationManager.AppSettings["ServiciosReporteCancelaciones"].ToString();
            string[] arrEstados = this.ConstruirArreglo(estados);
            dt = ServicesController.GetReporteCancelaciones(this.hdnNit.Value, dateFecha1, dateFecha2, arrEstados);

            //Agrega columna para mostrar los detalles
            dt.Columns.Add("Detalle");

            this.hdnAncho.Value = "0,150,80,90,80,90,80,85,85,100,80";
        }
        else if (valor.Equals("upgrade"))
        {
            this.lblTitulo.Text = "Reporte de upgrades";
            estados = ConfigurationManager.AppSettings["ServiciosReporteUpgrades"].ToString();
            string[] arrEstados = this.ConstruirArreglo(estados);
            dt = ServicesController.GetReporteUpgrade(this.hdnNit.Value, dateFecha1, dateFecha2, arrEstados);

            //Agrega columna para mostrar los detalles
            dt.Columns.Add("Detalle");

            this.hdnAncho.Value = "0,150,80,90,80,90,80,85,85,100,80";
        }

        //Da formato a algunas columnas
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Columns.Contains("Fecha Activación"))
                dt.Rows[i]["Fecha Activación"] = this.FormatearFecha(dt.Rows[i]["fechaActivacion"].ToString());
            if (dt.Columns.Contains("Fecha Contrato"))
                dt.Rows[i]["Fecha Contrato"] = this.FormatearFecha(dt.Rows[i]["fechaContrato"].ToString());
        }

        //Elimina columnas de fechas sin formatear
        if (dt.Columns.Contains("fechaActivacion"))
            dt.Columns.Remove("fechaActivacion");
        if (dt.Columns.Contains("fechaContrato"))
            dt.Columns.Remove("fechaContrato");        

        this.grd.DataSource = dt;
        this.grd.DataBind();
        Session["VIEWDETALLE"] = dt;
        
    }

    private void GetReporteFacturacion(string valor, string fecha1, string fecha2)
    { 
    
    }

    protected void grd_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        bool mostrandoServicios = false;
        bool mostrandoCasos = false;
        Enumeraciones.TipoReporte busqueda = (Enumeraciones.TipoReporte)Enum.Parse(typeof(Enumeraciones.TipoReporte), this.hdnBusq.Value);

        if ((busqueda == Enumeraciones.TipoReporte.ESTADO_SERVICIOS) || (busqueda == Enumeraciones.TipoReporte.SERVICIOS_ACTIVOS_PLATAFORMA) || (busqueda == Enumeraciones.TipoReporte.SOLICITUDES_EN_CURSO) || (busqueda == Enumeraciones.TipoReporte.ESTADO_DEMOS) || (busqueda == Enumeraciones.TipoReporte.REPORTES))
            mostrandoServicios = true;

        if ((busqueda == Enumeraciones.TipoReporte.ESTADO_DE_CASOS) || (busqueda == Enumeraciones.TipoReporte.CASOS_POR_TIPO))
            mostrandoCasos = true;

        if ((e.Row.RowType == DataControlRowType.Header) || (e.Row.RowType == DataControlRowType.DataRow))
        {       
     
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if(e.Row.RowIndex == 0)
                    e.Row.Style.Add("height","80px");
            }

            //Ancho de las columnas
            string[] ancho = this.hdnAncho.Value.Split(',');

            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                e.Row.Cells[i].BorderStyle = BorderStyle.None;                

                //Si se estan mostrando servicios se agrega link para ver el detalle en la ultima columna
                if ((mostrandoServicios == true) && (i == e.Row.Cells.Count - 1) && (e.Row.RowType == DataControlRowType.DataRow))
                {
                    HyperLink lnkDetalle = new HyperLink();
                    //lnkDetalle.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/homeCliente/DetalleServicio.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "id").ToString().Trim() + "&nit=" + this.hdnNit.Value + "','iframe','Detalle del servicio',1100,750);";
                    lnkDetalle.NavigateUrl = ConfigurationManager.AppSettings["urlPortal"] + "/homeCliente/DetalleServicio.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "id").ToString().Trim() + "&nit=" + this.hdnNit.Value;
                    lnkDetalle.ImageUrl = "../images/document.jpg";
                    e.Row.Cells[i].Controls.Add(lnkDetalle);

                    //Se oculta la col del id
                    e.Row.Cells[0].Visible = false;
                }

                //Si se estan mostrando casos se agrega link para mostrar detalle del caso
                if ((mostrandoCasos == true) && (i == 1) && (e.Row.RowType == DataControlRowType.DataRow))
                {
                    HyperLink lnkDetalle = new HyperLink();
                    lnkDetalle.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/services/CaseComment.aspx?idCaso=" + DataBinder.Eval(e.Row.DataItem, "idCasoSF").ToString().Trim() + "','iframe','Estado del Caso',1100,750);";
                    lnkDetalle.Text = DataBinder.Eval(e.Row.DataItem, "Número caso").ToString().Trim();                    
                    e.Row.Cells[i].Controls.Add(lnkDetalle);

                    //Se oculta la col del id
                    e.Row.Cells[0].Visible = false;
                }

                if (ancho.Length > 0)
                {                    
                    e.Row.Cells[i].Width = Convert.ToInt32(ancho[i]);                                            
                }
            }
        }


        if (e.Row.RowType == DataControlRowType.Header)
        {
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
                e.Row.Cells[i].Text = "<div id='divHeaderFlyout" + i.ToString() + "' onmouseover=\"CursorMano(this);\" onclick=\"asignarColumnaSeleccionada('" + e.Row.Cells[i].Text + "'); " + Flyout1.getClientID() + ".AttachTo('divHeaderFlyout" + i.ToString() + "'); " + Flyout1.getClientID() + ".Open();\" title='Click sobre el título para ver opciones' align='center'>" + e.Row.Cells[i].Text + "</div>";                

                //La oclumna del id se hace invisible cuando se estan mostrando servicios
                if (mostrandoServicios == true)
                    e.Row.Cells[0].Visible = false;

                //La columna del id de SF se hace invisible cuando se estan mostrando casos
                if (mostrandoCasos == true)
                    e.Row.Cells[0].Visible = false;
            }
        }
    }

    private string[] ConstruirArreglo(string cadena)
    {
        string[] arrRetorno = cadena.Split(',');

        //Recorre el arreglo y quita espacios en blanco
        for (int i = 0; i < arrRetorno.Length; i++)
        {
            arrRetorno[i] = arrRetorno[i].Trim();
        }

        return arrRetorno;
    }

    private string FormatearFecha(string cadena)
    {
        if (cadena.Contains("1753"))
            return "";
        else
        {
            if (cadena.Length >= 10)
                return cadena.Substring(0, 10);
            else
                return "";
        }
        
    }

    /// <summary>
    /// Retorna la fecha del string que le llega. Este string debe estar en formato dd/mm/yyyy
    /// </summary>
    /// <param name="date"></param>
    /// <returns></returns>
    private DateTime GetFechaFromString(string date)
    {
        char[] splitter = { '/' };
        string[] datePart = date.Split(splitter);
        return new DateTime(int.Parse(datePart[2]), int.Parse(datePart[1]), int.Parse(datePart[0]));
    }

    protected void btnExportar_Click(object sender, ImageClickEventArgs e)
    {
        //Si no hay datos para exportar se informa al usuario
        if (this.grd.Rows.Count == 0)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'>alert('No hay registros para exportar');</Script>");
            return;
        }

        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        Page pagina = new Page();
        HtmlForm form = new HtmlForm();

        GridView nuevaGrilla = new GridView();
        DataTable dt = (DataTable)Session["VIEWDETALLE"];
        if (dt.Columns.Contains("Detalle"))
            dt.Columns.Remove("Detalle");
        if (dt.Columns.Contains("id"))
            dt.Columns.Remove("id");
        if (dt.Columns.Contains("idCasoSF"))
            dt.Columns.Remove("idCasoSF");

        nuevaGrilla.BorderStyle = BorderStyle.None;
        nuevaGrilla.BorderWidth = 0;
        nuevaGrilla.CellPadding = 4;
        nuevaGrilla.CellSpacing = 3;
        nuevaGrilla.HeaderStyle.CssClass = "barra";
        nuevaGrilla.RowStyle.CssClass = "tds";
        nuevaGrilla.AlternatingRowStyle.BackColor = System.Drawing.Color.LightGray;
        nuevaGrilla.DataSource = dt;
        nuevaGrilla.DataBind();

        pagina.Controls.Add(form);        
        form.Controls.Add(nuevaGrilla);
        pagina.RenderControl(htw);
        
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("Content-Disposition", "attachment;filename=" + this.lblTitulo.Text.Replace(" ", "") + ".xls");
        Response.Charset = "UTF-8";

        Response.ContentEncoding = Encoding.Default;                
        Response.Write(sb.ToString());
        Response.End();        
    }


    #region "Filtros de la grilla"

    protected void btnBuscarGrilla_Click(object sender, ImageClickEventArgs e)
    {
        if (string.IsNullOrEmpty(this.txtContiene.Text.Trim()))
            this.loadGrid(this.hdnValor.Value);

        if (Session["VIEWDETALLE"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWDETALLE"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.RowFilter = "[" + columna + "] LIKE '%" + this.txtContiene.Text.Trim() + "%'";
            dtt = dw.ToTable();

            this.grd.DataSource = dtt;
            this.grd.DataBind();
            Session["VIEWDETALLE"] = dtt;

            if (dtt.Rows.Count == 0)            
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'>alert('No se encontraron resultados con el filtro seleccionado');</Script>");  
            

            this.txtContiene.Text = string.Empty;
        }
    }

    protected void lnkAscendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWDETALLE"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWDETALLE"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " ASC";
            dtt = dw.ToTable();

            this.grd.DataSource = dtt;
            this.grd.DataBind();
            Session["VIEWDETALLE"] = dtt;
        }
    }

    protected void lnkDescendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWDETALLE"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWDETALLE"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " DESC";
            dtt = dw.ToTable();

            this.grd.DataSource = dtt;
            this.grd.DataBind();
            Session["VIEWDETALLE"] = dtt;
        }
    }


    #endregion


}
